package com.cskaoyan.javase.oop2._1extends._5protected._3example;

/**
 * Java当中顶层祖先类是Object，所有类都直接或者间接继承了Object
 * Object类中有一个protected成员：clone()方法、
 * 该方法会被所有类继承
 *
 *
 * @since 10:55
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 问题1：在这里能不能创建A的对象，调用clone方法？
        /*
            不能，虽然Demo是Object类的子类，但创建A的对象，就不是子类自身对象了
         */
        // A a = new A();
        // 'clone()' has protected access in 'java.lang.Object'
        // a.clone();

        // 这里只能够创建Demo对象才能够调用clone方法
        Demo d = new Demo();
        // Unhandled exception: java.lang.CloneNotSupportedException
        d.clone();
    }
}

class A {
    public static void test() throws CloneNotSupportedException {
        // 问题2：这里能不能创建A对象，调用clone方法？
        /*
            可以
            因为不同包下，只有在子类中创建子类自身对象，才能够访问从父类中继承过来的受保护成员
         */
        A a = new A();
        a.clone();
    }
}